﻿Imports MetodosComuns
Imports extranet.BC
Imports extranet.BE
Imports System.Collections.Generic
Imports System.Data

Partial Class AdministrarVagas
  Inherits System.Web.UI.Page

  Private Const DEBUG As Boolean = False
  ' Inicializar parâmetros da Página
  Private Const TITULO_PAGINA As String = "Gerenciamento de Vagas"
  Private Const TITULO_REGISTROS As String = "VAGAS CADASTRADAS"
  Private Const TITULO_REGISTRO_DETALHE As String = "DETALHES DA VAGA"
  Private Const TITULO_REGISTRO_EDICAO As String = "ALTERAR VAGA"
  Private Const TITULO_REGISTRO_CADASTRO As String = "CADASTRO DE VAGA"
  Private Const MESSAGE_INSERIDO_COM_SUCESSO As String = "A Vaga foi Cadastrada com Sucesso!"
  Private Const MESSAGE_ALTERADO_COM_SUCESSO As String = "A Vaga foi Alterada com Sucesso!"
  Private Const MESSAGE_EXCLUIDO_COM_SUCESSO As String = "A Vaga foi Excluída com Sucesso!"
  Private Const MESSAGE_ERRO_NA_INSERCAO As String = "Erro na inserção do Registro!."
  Private Const MESSAGE_ERRO_NA_ALTERACAO As String = "Erro na atualização do Registro!."
  Private Const MESSAGE_ERRO_NA_EXCLUSAO As String = "Erro na exclusão do Registro!."

  Private Const MESSAGE_PROVA_INSERIDA_COM_SUCESSO As String = "A Prova foi Cadastrada com Sucesso!"
  Private Const MESSAGE_PROVA_ALTERADA_COM_SUCESSO As String = "A Prova foi Alterada com Sucesso!"
  Private Const MESSAGE_PROVA_EXCLUIDA_COM_SUCESSO As String = "A Prova foi Excluída com Sucesso!"

  Private Const SELECAO_QUESTAO As Integer = 0
  Private Const SELECAO_CANDIDATO As Integer = 1

  Private Const ROW_CODIGO As Integer = 0
  Private Const ROW_TITULO As Integer = 1
  Private Const ROW_AREAVAGA As Integer = 2
  Private Const ROW_DESCRICAO As Integer = 3
  Private Const ROW_ATIVO As Integer = 4

  Private Const ROW_CODIGO_PROVA As Integer = 0
  Private Const ROW_TITULO_PROVA As Integer = 1
  Private Const ROW_TEMPO_PROVA As Integer = 2

  Private Const SORT_INDICE_ARRAY As Integer = 1
  Private Const SORT_REGISTROS As Integer = 0
  Private Const SORT_CANDIDATOS As Integer = 1

  Private Const TITULO_REGISTRO_PROVA_DETALHE As String = "DETALHES DA PROVA"
  Private Const TITULO_REGISTRO_PROVA_EDICAO As String = "ALTERAR PROVA"
  Private Const TITULO_REGISTRO_PROVA_CADASTRO As String = "CADASTRO DE PROVA"

  Dim strCodigoProva As String

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    '==================       PROCEDIMENTO  PADRÃO  SEGURANÇA     =============================
    Dim objBESeguranca As BESeguranca
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    If IsNothing(objBEUsuario) Then Response.Redirect(TELA_LOGOUT)
    Session("strTela") = MetodosComuns.GetCurrentPageName()
    If Not IsPostBack Then          ' SEGURANÇA
      objBESeguranca = BCSeguranca.SelecionaPermissoes(objBEUsuario.GrupoAcesso, Session("strTela"))
      If Not objBESeguranca.Autorizado Then Response.Redirect(TELA_LOGOUT)
      Session("objBESeguranca") = objBESeguranca
    Else
      objBESeguranca = Session("objBESeguranca")
    End If

    '==================       ALTERAR SE FOR NECESSARIO          ===============================
    If Not IsPostBack Then
      Dim sortExpression(SORT_INDICE_ARRAY) As String
      Dim sortDirection(SORT_INDICE_ARRAY) As String
      Session(Session("strTela") & "_SortExpression") = sortExpression
      Session(Session("strTela") & "_SortDirection") = sortDirection

      lblTituloPagina.Text = TITULO_PAGINA
      With objBESeguranca
        If Not .Escrita Then btnCadastrar.Visible = False
      End With

      ddl_AreaVaga_Init(ddlArea, Nothing)

      ddl_Nacionalidade.DataSource = BCCandidato.listarNacionalidadesCandidatos()
      ddl_Nacionalidade.DataBind()

      ddl_Cidade.DataSource = BCCandidato.listarCidadesCandidatos()
      ddl_Cidade.DataBind()

      ddl_Estado.DataSource = BCCandidato.listarEstadosCandidatos()
      ddl_Estado.DataBind()

      ddl_GrauEscolaridade.DataSource = BCCandidato.listarEscolaridadesCandidatos()
      ddl_GrauEscolaridade.DataBind()

      mostraPaineis(ESTADO_INICIAL)
    End If

  End Sub

  Protected Sub mostraMensagem(ByVal message As String)
    lblSucesso.Visible = True
    lblSucesso.Text = message
  End Sub

  Protected Sub mostraMensagemDeErro(ByVal message As String)
    lblErro.Visible = True
    lblErro.Text = message
  End Sub

  Protected Sub mostraPaineisComErro(ByVal estado As Int16, ByVal message As String)
    mostraPaineis(estado)
    lblErro.Visible = True
    lblErro.Text = message
  End Sub

  Protected Sub mostraPaineis(ByVal estado As Int16, ByVal message As String)
    mostraPaineis(estado)
    lblSucesso.Visible = True
    lblSucesso.Text = message
  End Sub

  Protected Sub mostraPaineis(ByVal estado As Int16)
    Dim objBESeguranca As BESeguranca = Session("objBESeguranca")
    lblSucesso.Visible = False
    lblErro.Visible = False

    ' SEGURANÇA
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        If Not objBESeguranca.Leitura Then estado = IIf(objBESeguranca.Escrita, ESTADO_CADASTRO, ESTADO_BLOQUEADO)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
        If Not objBESeguranca.Escrita Then estado = IIf(objBESeguranca.Leitura, ESTADO_LISTA, ESTADO_BLOQUEADO)
    End Select

    ' Set Título do painel
    setTitulo(estado)

    ' Set Indice do Registro selecionado na lista de Registros
    grvRegistros.Enabled = (Not estado = ESTADO_BLOQUEADO)
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        grvRegistros.SelectedIndex = -1
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
        grvRegistros.SelectedIndex = -1
    End Select

    ' Set o estado do Data View
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        dtvRegistro.ChangeMode(DetailsViewMode.ReadOnly)
      Case ESTADO_DETALHE
        dtvRegistro.ChangeMode(DetailsViewMode.ReadOnly)
      Case ESTADO_EDICAO
        dtvRegistro.ChangeMode(DetailsViewMode.Edit)
      Case ESTADO_CADASTRO
        dtvRegistro.ChangeMode(DetailsViewMode.Insert)
    End Select

    ' Mostra Painel segundo o estado
    If Not DEBUG Then
      Select Case estado
        Case ESTADO_BLOQUEADO
          panBuscaRegistro.Visible = False
          pangrvRegistros.Visible = False
          pandtvRegistro.Visible = False
        Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
          panBuscaRegistro.Visible = True
          pangrvRegistros.Visible = True
          pandtvRegistro.Visible = False
        Case ESTADO_DETALHE, ESTADO_EDICAO, ESTADO_CADASTRO
          panBuscaRegistro.Visible = False
          pangrvRegistros.Visible = False
          pandtvRegistro.Visible = True
      End Select
    Else
      panBuscaRegistro.Visible = True
      pangrvRegistros.Visible = True
      pandtvRegistro.Visible = True
    End If

    ' Set Registro(s) segundo o estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        mostraRegistros()
      Case ESTADO_DETALHE, ESTADO_EDICAO
        selecionaRegistro()
      Case ESTADO_CADASTRO
        mostraRegistro()
    End Select

    ' Set Focus segundo o Estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        scriptManager.SetFocus(txtVaga)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
    End Select

  End Sub

  Protected Sub setTitulo(ByVal estado As Int16)
    ' Set Título do painel
    Select Case estado
      Case ESTADO_BLOQUEADO, ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        grvRegistros.Caption = TITULO_REGISTROS
      Case ESTADO_DETALHE
        dtvRegistro.Caption = TITULO_REGISTRO_DETALHE
      Case ESTADO_EDICAO
        dtvRegistro.Caption = TITULO_REGISTRO_EDICAO
      Case ESTADO_CADASTRO
        dtvRegistro.Caption = TITULO_REGISTRO_CADASTRO
    End Select
  End Sub

  Protected Sub btnBuscar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscar.Click
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub btnCadastrar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnCadastrar.Click
    mostraPaineis(ESTADO_CADASTRO)
  End Sub

  Protected Sub grvRegistros_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles grvRegistros.PageIndexChanging
    grvRegistros.PageIndex = e.NewPageIndex
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub grvRegistros_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grvRegistros.Sorting
    setSorting(SORT_REGISTROS, e)
    e.Cancel = True
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub grvRegistros_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvRegistros.SelectedIndexChanged
    mostraPaineis(ESTADO_DETALHE)
  End Sub

  Sub grvRegistros_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles grvRegistros.RowCommand
    Dim objBEVaga As New BEVaga
    If e.CommandArgument.ToString().Length() > 0 Then
      Session("IdVaga") = e.CommandArgument
      objBEVaga = BCVaga.Selecionar(e.CommandArgument)(0)
      Session("idProva") = objBEVaga.Prova.Id
    End If
    Select Case e.CommandName.ToUpper()
      Case "PROVA"
        strCodigoProva = objBEVaga.Codigo.ToUpper()
        mostraPainelProva(ESTADO_DETALHE)
      Case "CANDIDATOS"
        Session("Candidatos") = BCCandidato.SelecionarCandidatosAVaga(e.CommandArgument)
        grvCandidatos.DataSource = Session("Candidatos")
        grvCandidatos.DataBind()

        panBuscaRegistro.Visible = False
        pangrvRegistros.Visible = False
        panCandidatos.Visible = True
    End Select
  End Sub

  Protected Sub finalizaConsultaItem(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub btnAlterar_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_EDICAO)
  End Sub

  Protected Sub btnCancelarAlteracao_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_DETALHE)
  End Sub

  Protected Sub btnCancelarCadastro_Click(ByVal sender As Object, ByVal e As System.EventArgs)
    mostraPaineis(ESTADO_INICIAL)
  End Sub

  Protected Property IsInEditMode() As Boolean
    Get
      Return Not (dtvRegistro.CurrentMode = DetailsViewMode.ReadOnly)
    End Get
    Set(ByVal value As Boolean)
    End Set
  End Property

  Protected Sub dtvRegistro_ModeChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewModeEventArgs) Handles dtvRegistro.ModeChanging
    e.NewMode = dtvRegistro.CurrentMode
  End Sub

  Protected Sub dtvRegistro_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles dtvRegistro.DataBound
    Dim objBESeguranca As BESeguranca = DirectCast(Session("objBESeguranca"), BESeguranca)
    Dim mc As New MetodosComuns
    Select Case dtvRegistro.CurrentMode

      Case DetailsViewMode.Insert         ' MODO de INSERÇÃO
        If Not objBESeguranca.Leitura Then dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnCancelarCadastro").Visible = False
        scriptManager.SetFocus(dtvRegistro.Rows(0).FindControl("txt_Codigo"))
        setTitulo(ESTADO_CADASTRO)

      Case DetailsViewMode.Edit           ' MODO de EDIÇÃO
        scriptManager.SetFocus(dtvRegistro.Rows(0).FindControl("txt_Codigo"))
        setTitulo(ESTADO_EDICAO)

      Case DetailsViewMode.ReadOnly       ' MODO de LEITURA
        With objBESeguranca
          If dtvRegistro.Rows.Count Then
            If Not .Exclusao Then dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnExcluir").Visible = False
            If Not .Modificacao Then dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnAlterar").Visible = False
          End If
        End With
        If (dtvRegistro.Rows.Count > 0) Then
          scriptManager.SetFocus(dtvRegistro.Rows(dtvRegistro.Rows.Count - 1).FindControl("btnOk"))
        End If
        setTitulo(ESTADO_DETALHE)

    End Select
  End Sub

  Protected Sub dtvRegistro_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dtvRegistro.ItemInserting
    If verificaInformacao() AndAlso processaRegistro() Then dtvRegistro_ItemInserted(sender, Nothing)
  End Sub

  Protected Sub dtvRegistro_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dtvRegistro.ItemInserted
    If e IsNot Nothing Then e.ExceptionHandled = True
    mostraPaineis(ESTADO_INICIAL, MESSAGE_INSERIDO_COM_SUCESSO)
  End Sub

  Protected Sub dtvRegistro_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles dtvRegistro.ItemUpdating
    If verificaInformacao() AndAlso processaRegistro() Then dtvRegistro_ItemUpdated(sender, Nothing)
  End Sub

  Protected Sub dtvRegistro_ItemUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdatedEventArgs) Handles dtvRegistro.ItemUpdated
    Dim strVaga As String = txtVaga.Text
    Dim strArea As String = ddlArea.SelectedValue
    Dim intEstado As Integer = rbl_ativo.SelectedValue
    If e IsNot Nothing Then e.ExceptionHandled = True
    If (LocalizaStringsNoTexto(strVaga, DirectCast(dtvRegistro.Rows(ROW_CODIGO).FindControl("txt_Codigo"), TextBox).Text) And _
        LocalizaStringsNoTexto(strArea, DirectCast(dtvRegistro.Rows(ROW_AREAVAGA).FindControl("ddl_AreaVaga"), DropDownList).SelectedValue)) Then
      mostraPaineis(ESTADO_DETALHE, MESSAGE_ALTERADO_COM_SUCESSO)
    Else
      mostraPaineis(ESTADO_LISTA, MESSAGE_ALTERADO_COM_SUCESSO)
    End If
  End Sub

  Protected Sub dtvRegistro_ItemDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeleteEventArgs) Handles dtvRegistro.ItemDeleting
    Try
      BCVaga.Excluir(New BEVaga(Integer.Parse(dtvRegistro.DataKey("Id"))))
      dtvRegistro_ItemDeleted(sender, Nothing)
    Catch ex As Exception
      mostraPaineisComErro(ESTADO_DETALHE, MESSAGE_ERRO_NA_EXCLUSAO)
    End Try
  End Sub

  Protected Sub dtvRegistro_ItemDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeletedEventArgs) Handles dtvRegistro.ItemDeleted
    If e IsNot Nothing Then e.ExceptionHandled = True
    mostraPaineis(ESTADO_LISTA, MESSAGE_EXCLUIDO_COM_SUCESSO)
  End Sub

  Protected Sub mostraRegistros()
    grvRegistros.DataSource = BCVaga.Selecionar(txtVaga.Text, IIf(ddlArea.SelectedValue = "", 0, ddlArea.SelectedValue), rbl_ativo.SelectedValue, _
                                                Session(Session("strTela") & "_SortExpression")(SORT_REGISTROS), _
                                                Session(Session("strTela") & "_SortDirection")(SORT_REGISTROS))
    grvRegistros.DataBind()
  End Sub

  Protected Sub selecionaRegistro()
    Dim intId As Integer = Integer.Parse(grvRegistros.SelectedDataKey("Id"))
    dtvRegistro.DataSource = BCVaga.Selecionar(intId)
    dtvRegistro.DataBind()
    mostraRegistro()
  End Sub

  Protected Sub mostraRegistro()
  End Sub

  Protected Function verificaInformacao() As Boolean
    Dim boolProcessa As Boolean = True
    If Not boolProcessa Then
    End If
    Return boolProcessa
  End Function

  Protected Function processaRegistro() As Boolean
    Dim boolInsercao As Boolean = (dtvRegistro.CurrentMode = DetailsViewMode.Insert)
    Dim vaga As New BEVaga()
    Dim booSucesso As Boolean = True
    Try
      With vaga
        .Id = dtvRegistro.DataKey("Id")
        .Codigo = DirectCast(dtvRegistro.Rows(ROW_CODIGO).FindControl("txt_Codigo"), TextBox).Text
        .Titulo = DirectCast(dtvRegistro.Rows(ROW_TITULO).FindControl("txt_Titulo"), TextBox).Text
        .AreaVaga = DirectCast(dtvRegistro.Rows(ROW_AREAVAGA).FindControl("ddl_AreaVaga"), DropDownList).SelectedValue
        .Descricao = DirectCast(dtvRegistro.Rows(ROW_DESCRICAO).FindControl("ed_Descricao"), AjaxControlToolkit.HTMLEditor.Editor).Content
        .Estado = DirectCast(dtvRegistro.Rows(ROW_ATIVO).FindControl("ddl_Ativo"), DropDownList).SelectedValue
      End With
      If boolInsercao Then
        BCVaga.Cadastrar(vaga)
      Else
        BCVaga.Atualizar(vaga)
      End If
    Catch ex As Exception
      mostraMensagemDeErro(IIf(boolInsercao, MESSAGE_ERRO_NA_INSERCAO, MESSAGE_ERRO_NA_ALTERACAO))
      booSucesso = False
    End Try
    Return booSucesso
  End Function

  Sub ddl_AreaVaga_Init(ByVal sender As Object, ByVal e As EventArgs)
    Dim objDDL As DropDownList = sender
    Dim objLI As ListItem
    Dim arrValues As Array = System.Enum.GetValues(GetType(AreaVaga))
    For intI As Integer = 0 To arrValues.Length() - 1
      objLI = New ListItem(arrValues(intI).ToString(), arrValues(intI))
      objDDL.Items.Add(objLI)
    Next
  End Sub

  '=========****************    P R O V A                        ****************=========
  Protected Sub mostraPainelProvaComErro(ByVal estado As Int16, ByVal message As String)
    mostraPainelProva(estado)
    lblErro.Visible = True
    lblErro.Text = message
  End Sub

  Protected Sub mostraPainelProva(ByVal estado As Int16, ByVal message As String)
    mostraPainelProva(estado)
    lblSucesso.Visible = True
    lblSucesso.Text = message
  End Sub

  Protected Sub mostraPainelProva(ByVal estado As Int16)
    Dim objBESeguranca As BESeguranca = Session("objBESeguranca")
    lblSucesso.Visible = False
    lblErro.Visible = False

    ' SEGURANÇA
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        If Not objBESeguranca.Leitura Then estado = IIf(objBESeguranca.Escrita, ESTADO_CADASTRO, ESTADO_BLOQUEADO)
      Case ESTADO_DETALHE
      Case ESTADO_EDICAO
      Case ESTADO_CADASTRO
        If Not objBESeguranca.Escrita Then estado = IIf(objBESeguranca.Leitura, ESTADO_LISTA, ESTADO_BLOQUEADO)
    End Select

    ' Set Título do painel
    setTituloProva(estado)

    ' Set o estado do Data View
    Select Case estado
      Case ESTADO_BLOQUEADO, ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA, ESTADO_DETALHE
        dtvProva.ChangeMode(DetailsViewMode.ReadOnly)
      Case ESTADO_EDICAO
        dtvProva.ChangeMode(DetailsViewMode.Edit)
      Case ESTADO_CADASTRO
        dtvProva.ChangeMode(DetailsViewMode.Insert)
    End Select

    ' Mostra Painel segundo o estado
    panBuscaRegistro.Visible = False
    pangrvRegistros.Visible = False
    Select Case estado
      Case ESTADO_BLOQUEADO
        pandtvProva.Visible = False
        panQuestoes.Visible = False
        panQuestao.Visible = False
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
        pandtvProva.Visible = True
        panQuestoes.Visible = True
        panQuestao.Visible = False
      Case ESTADO_DETALHE
        pandtvProva.Visible = True
        panQuestoes.Visible = True
        panQuestao.Visible = False
      Case ESTADO_EDICAO, ESTADO_CADASTRO
        pandtvProva.Visible = True
        panQuestoes.Visible = False
        panQuestao.Visible = False
    End Select

    ' Set Registro(s) segundo o estado
    Select Case estado
      Case ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
      Case ESTADO_DETALHE, ESTADO_EDICAO
        selecionaRegistroProva()
      Case ESTADO_CADASTRO
    End Select

  End Sub

  Protected Sub setTituloProva(ByVal estado As Int16)
    ' Set Título do painel
    Select Case estado
      Case ESTADO_BLOQUEADO, ESTADO_INICIAL, ESTADO_BUSCA, ESTADO_LISTA
      Case ESTADO_DETALHE
        dtvProva.Caption = TITULO_REGISTRO_PROVA_DETALHE
      Case ESTADO_EDICAO
        dtvRegistro.Caption = TITULO_REGISTRO_PROVA_EDICAO
      Case ESTADO_CADASTRO
        dtvRegistro.Caption = TITULO_REGISTRO_PROVA_CADASTRO
    End Select
  End Sub

  Protected Sub selecionaRegistroProva()
    Dim objBEProva As IList(Of BEProva)
    objBEProva = BCProva.Selecionar(Session("IdProva"))

    If objBEProva Is Nothing OrElse objBEProva.Count = 0 Then
      dtvProva.ChangeMode(DetailsViewMode.Insert)
      grvQuestoes.DataSource = Nothing
      grvQuestoes.DataBind()
      panQuestoes.Visible = False
    Else
      grvQuestoes.DataSource = objBEProva(0).Questoes
      grvQuestoes.DataBind()
    End If

    dtvProva.DataSource = objBEProva
    dtvProva.DataBind()
    If objBEProva Is Nothing OrElse objBEProva.Count = 0 Then
      DirectCast(dtvProva.Rows(ROW_CODIGO_PROVA).FindControl("txt_codigo"), TextBox).Text = strCodigoProva
    End If
  End Sub

  Protected Sub grvQuestoes_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grvQuestoes.RowDataBound
    If (e.Row.RowType = DataControlRowType.DataRow) Then
      Dim objBEQuestao As BEQuestao = e.Row.DataItem
      If Not objBEQuestao Is Nothing Then
        With DirectCast(e.Row.FindControl("grvAlternativas"), GridView)
          .DataSource = objBEQuestao.Alternativas
          .DataBind()
        End With
      End If
    End If
  End Sub

  Sub dtvProva_ItemCommand(ByVal sender As Object, ByVal e As DetailsViewCommandEventArgs) Handles dtvProva.ItemCommand
    Select Case e.CommandName.ToUpper()
      Case "FINALIZARCONSULTA", "CANCELARINSERCAO"
        mostraPainelProva(ESTADO_BLOQUEADO)
        mostraPaineis(ESTADO_LISTA)
      Case "CANCELAREDICAO"
        mostraPainelProva(ESTADO_DETALHE)
      Case "EDIT"
        mostraPainelProva(ESTADO_EDICAO)
    End Select
  End Sub

  Protected Sub dtvProva_ItemInserting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertEventArgs) Handles dtvProva.ItemInserting
    If processaRegistroProva() Then dtvProva_ItemInserted(sender, Nothing)
  End Sub

  Protected Sub dtvProva_ItemInserted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewInsertedEventArgs) Handles dtvProva.ItemInserted
    If e IsNot Nothing Then e.ExceptionHandled = True
    Dim objBEVaga As New BEVaga(Session("IdVaga"))
    objBEVaga.Prova = New BEProva(Session("IdProva"))
    BCVaga.RelacionaVagaProva(objBEVaga)
    mostraPainelProva(ESTADO_DETALHE, MESSAGE_PROVA_INSERIDA_COM_SUCESSO)
  End Sub

  Protected Sub dtvProva_ItemUpdating(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdateEventArgs) Handles dtvProva.ItemUpdating
    If processaRegistroProva() Then dtvProva_ItemUpdated(sender, Nothing)
  End Sub

  Protected Sub dtvProva_ItemUpdated(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewUpdatedEventArgs) Handles dtvProva.ItemUpdated
    mostraPainelProva(ESTADO_DETALHE, MESSAGE_PROVA_ALTERADA_COM_SUCESSO)
  End Sub

  Protected Sub dtvProva_ItemDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeleteEventArgs) Handles dtvProva.ItemDeleting
    Try
      BCProva.Excluir(New BEProva(Integer.Parse(dtvProva.DataKey("Id"))))
      dtvProva_ItemDeleted(sender, Nothing)
    Catch ex As Exception
      mostraPainelProvaComErro(ESTADO_DETALHE, MESSAGE_ERRO_NA_EXCLUSAO)
    End Try
  End Sub

  Protected Sub dtvProva_ItemDeleted(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewDeletedEventArgs) Handles dtvProva.ItemDeleted
    If e IsNot Nothing Then e.ExceptionHandled = True
    mostraPaineis(ESTADO_LISTA, MESSAGE_PROVA_EXCLUIDA_COM_SUCESSO)
  End Sub

  Protected Sub dtvProva_ModeChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.DetailsViewModeEventArgs) Handles dtvProva.ModeChanging
    e.NewMode = dtvProva.CurrentMode
  End Sub

  Protected Function processaRegistroProva() As Boolean
    Dim boolInsercao As Boolean = (dtvProva.CurrentMode = DetailsViewMode.Insert)
    Dim prova As New BEProva()
    Dim booSucesso As Boolean = True
    Try
      With prova
        .Id = dtvProva.DataKey("Id")
        .Codigo = DirectCast(dtvProva.Rows(ROW_CODIGO_PROVA).FindControl("txt_Codigo"), TextBox).Text
        .Titulo = DirectCast(dtvProva.Rows(ROW_TITULO_PROVA).FindControl("txt_Titulo"), TextBox).Text
        .TempoTotal = DirectCast(dtvProva.Rows(ROW_TEMPO_PROVA).FindControl("txt_Tempo"), TextBox).Text
      End With
      If boolInsercao Then
        Session("idProva") = BCProva.Cadastrar(prova)
      Else
        BCProva.Atualizar(prova)
      End If
    Catch ex As Exception
      mostraMensagemDeErro(IIf(boolInsercao, MESSAGE_ERRO_NA_INSERCAO, MESSAGE_ERRO_NA_ALTERACAO) & "<br />" & ex.Message)
      booSucesso = False
    End Try
    Return booSucesso
  End Function

  Protected Sub btnAddQuestao_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnAddQuestao.Click
    lblErro.Visible = False
    lblSucesso.Visible = False
    LimpaQuestao()
    hd_Id.Value = 0
    setSelecao(SELECAO_QUESTAO)
    lbl_Titulo_Questao.Text = "CADASTRAR QUESTÃO"
  End Sub

  '=========****************           PAINEL  DE  SELECAO             ****************=========
  Protected Sub setSelecao(ByVal tipoSelecao As Integer)
    pandtvProva.Visible = False
    panQuestao.Visible = False
    pnlgrvCandidatosSelecao.Visible = False
    Select Case tipoSelecao
      Case SELECAO_QUESTAO
        panQuestoes.Visible = False
        panQuestao.Visible = True
      Case SELECAO_CANDIDATO
        pnlgrvCandidatosSelecao.Visible = True
    End Select
    upSelecao.Update()
    Session("intSelecao") = tipoSelecao
  End Sub

  '=========****************           SELECAO DE QUESTAO        ****************=========
  Sub grvQuestoes_RowCommand(ByVal sender As Object, ByVal e As GridViewCommandEventArgs) Handles grvQuestoes.RowCommand
    lblErro.Visible = False
    lblSucesso.Visible = False
    Try
      Select Case e.CommandName.ToUpper()
        Case "EDITARQUESTAO"
          LimpaQuestao()
          LerQuestao(e.CommandArgument)
          setSelecao(SELECAO_QUESTAO)
          lbl_Titulo_Questao.Text = "ALTERAR QUESTÃO"
        Case "EXCLUIRQUESTAO"
          BCQuestao.Excluir(New BEQuestao(e.CommandArgument))
          grvQuestoes.DataSource = BCQuestao.Selecionar("", dtvProva.DataKey("Id"), "", "")
          grvQuestoes.DataBind()
          mostraMensagem(MESSAGE_EXCLUIDO_COM_SUCESSO.ToString().Replace("Vaga", "Questão"))
        Case "MUDAORDEMPARACIMA"
          Dim objBEProva As BEProva = MontaObjetoProva(e.CommandArgument)
          If objBEProva.Questoes(0).Ordem > 1 Then
            objBEProva.Questoes(0).Ordem -= 1
            BCProva.MudaOrdemQuestao(objBEProva)
            grvQuestoes.DataSource = BCQuestao.Selecionar("", dtvProva.DataKey("Id"), "", "")
            grvQuestoes.DataBind()
          End If
        Case "MUDAORDEMPARABAIXO"
          Dim objBEProva As BEProva = MontaObjetoProva(e.CommandArgument)
          If objBEProva.Questoes(0).Ordem < grvQuestoes.Rows().Count() Then
            objBEProva.Questoes(0).Ordem += 1
            BCProva.MudaOrdemQuestao(objBEProva)
            grvQuestoes.DataSource = BCQuestao.Selecionar("", dtvProva.DataKey("Id"), "", "")
            grvQuestoes.DataBind()
          End If
      End Select
    Catch ex As Exception
      mostraMensagemDeErro("Erro no processo<br/>" & ex.Message)
    End Try
  End Sub

  Protected Sub LimpaQuestao()
    hd_Id.Value = 0
    ed_Enunciado.Content = ""
    cb_EhDissertativa.Checked = False
    hd_IdAlternativa1.Value = 0
    rb_Alternativa1.Checked = False
    txt_Alternativa1.Text = ""
    hd_IdAlternativa2.Value = 0
    rb_Alternativa2.Checked = False
    txt_Alternativa2.Text = ""
    hd_IdAlternativa3.Value = 0
    rb_Alternativa3.Checked = False
    txt_Alternativa3.Text = ""
    hd_IdAlternativa4.Value = 0
    rb_Alternativa4.Checked = False
    txt_Alternativa4.Text = ""
    hd_IdAlternativa5.Value = 0
    rb_Alternativa5.Checked = False
    txt_Alternativa5.Text = ""
  End Sub

  Protected Sub LerQuestao(ByVal intId As Integer)
    Dim objBEQuestao As BEQuestao = BCQuestao.Selecionar(intId)(0)
    hd_Id.Value = intId
    ed_Enunciado.Content = objBEQuestao.Enunciado
    If objBEQuestao.EhDissertativa Then
      cb_EhDissertativa.Checked = True
    Else
      For intI As Integer = 0 To objBEQuestao.Alternativas.Count() - 1
        With objBEQuestao.Alternativas(intI)
          If .RespostaCerta Then
            rb_Alternativa1.Checked = (intI = 0)
            rb_Alternativa2.Checked = (intI = 1)
            rb_Alternativa3.Checked = (intI = 2)
            rb_Alternativa4.Checked = (intI = 3)
            rb_Alternativa5.Checked = (intI = 4)
          End If
          Select Case intI
            Case 0
              hd_IdAlternativa1.Value = .Id
              txt_Alternativa1.Text = .Texto
            Case 1
              hd_IdAlternativa2.Value = .Id
              txt_Alternativa2.Text = .Texto
            Case 2
              hd_IdAlternativa3.Value = .Id
              txt_Alternativa3.Text = .Texto
            Case 3
              hd_IdAlternativa4.Value = .Id
              txt_Alternativa4.Text = .Texto
            Case 4
              hd_IdAlternativa5.Value = .Id
              txt_Alternativa5.Text = .Texto
          End Select
        End With
      Next
    End If
  End Sub

  Protected Sub btnGravarQuestao_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnGravarQuestao.Click
    lblErro.Visible = False
    Dim boolInsercao As Boolean = (hd_Id.Value = 0)
    Dim objBEQuestao As New BEQuestao()
    Dim strErro As String = ""
    Dim intCheckedCerto As Integer = 0
    Dim intCheckedErrado As Integer = 0
    Try
      If ed_Enunciado.Content.Trim().Length = 0 Then strErro &= "Preencha o Enunciado da Questão<br/>"
      If Not cb_EhDissertativa.Checked Then
        If txt_Alternativa1.Text.Trim() = "" AndAlso txt_Alternativa2.Text.Trim() = "" AndAlso _
           txt_Alternativa3.Text.Trim() = "" AndAlso txt_Alternativa4.Text.Trim() = "" AndAlso _
           txt_Alternativa5.Text.Trim() = "" Then
          strErro &= "Digite as alternativas para esta questão<br/>"
        Else
          If (rb_Alternativa1.Checked AndAlso txt_Alternativa1.Text.Trim().Length() > 0) Then intCheckedCerto += 1
          If (rb_Alternativa2.Checked AndAlso txt_Alternativa2.Text.Trim().Length() > 0) Then intCheckedCerto += 1
          If (rb_Alternativa3.Checked AndAlso txt_Alternativa3.Text.Trim().Length() > 0) Then intCheckedCerto += 1
          If (rb_Alternativa4.Checked AndAlso txt_Alternativa4.Text.Trim().Length() > 0) Then intCheckedCerto += 1
          If (rb_Alternativa5.Checked AndAlso txt_Alternativa5.Text.Trim().Length() > 0) Then intCheckedCerto += 1
          If intCheckedCerto = 0 Then strErro &= "Deve selecionar a resposta certa dentre as alternativa digitadas<br/>"
          If intCheckedCerto > 1 Then strErro &= "Apenas deve ser selecionada uma alternativa certa<br/>"
        End If
      End If
      If strErro.Length() > 0 Then
        mostraMensagemDeErro(strErro)
      Else
        With objBEQuestao
          .Id = hd_Id.Value
          .Enunciado = ed_Enunciado.Content
          .EhDissertativa = cb_EhDissertativa.Checked
          If Not cb_EhDissertativa.Checked Then
            objBEQuestao.Alternativas = New List(Of BEAlternativa)
            If txt_Alternativa1.Text.Trim().Length() > 0 Then
              Dim objBEAlternativa As New BEAlternativa
              objBEAlternativa.Id = hd_IdAlternativa1.Value
              objBEAlternativa.Texto = txt_Alternativa1.Text
              objBEAlternativa.RespostaCerta = rb_Alternativa1.Checked
              objBEQuestao.Alternativas.Add(objBEAlternativa)
            End If
            If txt_Alternativa2.Text.Trim().Length() > 0 Then
              Dim objBEAlternativa As New BEAlternativa
              objBEAlternativa.Id = hd_IdAlternativa2.Value
              objBEAlternativa.Texto = txt_Alternativa2.Text
              objBEAlternativa.RespostaCerta = rb_Alternativa2.Checked
              objBEQuestao.Alternativas.Add(objBEAlternativa)
            End If
            If txt_Alternativa3.Text.Trim().Length() > 0 Then
              Dim objBEAlternativa As New BEAlternativa
              objBEAlternativa.Id = hd_IdAlternativa3.Value
              objBEAlternativa.Texto = txt_Alternativa3.Text
              objBEAlternativa.RespostaCerta = rb_Alternativa3.Checked
              objBEQuestao.Alternativas.Add(objBEAlternativa)
            End If
            If txt_Alternativa4.Text.Trim().Length() > 0 Then
              Dim objBEAlternativa As New BEAlternativa
              objBEAlternativa.Id = hd_IdAlternativa4.Value
              objBEAlternativa.Texto = txt_Alternativa4.Text
              objBEAlternativa.RespostaCerta = rb_Alternativa4.Checked
              objBEQuestao.Alternativas.Add(objBEAlternativa)
            End If
            If txt_Alternativa5.Text.Trim().Length() > 0 Then
              Dim objBEAlternativa As New BEAlternativa
              objBEAlternativa.Id = hd_IdAlternativa5.Value
              objBEAlternativa.Texto = txt_Alternativa5.Text
              objBEAlternativa.RespostaCerta = rb_Alternativa5.Checked
              objBEQuestao.Alternativas.Add(objBEAlternativa)
            End If
          End If
        End With
        If boolInsercao Then
          Session("IdQuestao") = BCQuestao.Cadastrar(objBEQuestao)
          Dim objBEProva As New BEProva(Session("IdProva"))
          objBEProva.Questoes.Add(New BEQuestao(Session("IdQuestao")))
          BCProva.RelacionaProvaQuestao(objBEProva)
        Else
          Session("IdQuestao") = objBEQuestao.Id
          BCQuestao.Atualizar(objBEQuestao)
        End If
        grvQuestoes.DataSource = BCQuestao.Selecionar("", dtvProva.DataKey("Id"), "", "")
        grvQuestoes.DataBind()
        btnCancelarEdicao_Click(btnCancelarEdicao, Nothing)
        mostraMensagem(IIf(boolInsercao, MESSAGE_INSERIDO_COM_SUCESSO, MESSAGE_ALTERADO_COM_SUCESSO).ToString().Replace("Vaga", "Questão"))
      End If
    Catch ex As Exception
      mostraMensagemDeErro(IIf(boolInsercao, MESSAGE_ERRO_NA_INSERCAO, MESSAGE_ERRO_NA_ALTERACAO))
    End Try
  End Sub

  Protected Sub btnCancelarEdicao_Click(ByVal sender As Object, ByVal e As EventArgs) Handles btnCancelarEdicao.Click
    lblErro.Visible = False
    lblSucesso.Visible = False
    panQuestao.Visible = False
    panQuestoes.Visible = True
    pandtvProva.Visible = True
  End Sub

  Protected Sub mostraMensagemDeErroQuestao(ByVal message As String)
    lblErroQuestao.Visible = True
    lblErroQuestao.Text = message
  End Sub

  Protected Function MontaObjetoProva(ByVal strArguments As String) As BEProva
    Dim arrArguments As Array = strArguments.Split(",")
    Dim objBEProva As New BEProva(dtvProva.DataKey("Id"))
    objBEProva.Questoes = New List(Of BEQuestao)
    objBEProva.Questoes.Add(New BEQuestao(arrArguments(0)))
    objBEProva.Questoes(0).Ordem = arrArguments(1)
    Return objBEProva
  End Function

  '=========****************           SELECAO DE CANDIDATOS           ****************=========
  Protected Sub grvCandidatos_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grvCandidatos.RowDataBound
    If (e.Row.RowType = DataControlRowType.DataRow) Then
      Dim objBECandidato As BECandidato = e.Row.DataItem
      Dim objBEProva As BEProva = BCProva.ResumoDaProva(objBECandidato.Id, Session("idProva"))
      If Not objBEProva Is Nothing Then
        DirectCast(e.Row.FindControl("lbl_RankingRespostas"), Label).Text = objBEProva.RespostasCertas & "/" & objBEProva.NumeroDeQuestoes
        DirectCast(e.Row.FindControl("lbl_StatusProva"), Label).Text = IIf(objBEProva.NumeroDeQuestoes = objBEProva.NumeroDeQuestoesRespondidas, "Completada", "em&nbsp;Andamento")
        DirectCast(e.Row.FindControl("btnProva"), ImageButton).Visible = (objBEProva.NumeroDeQuestoesRespondidas > 0)
      End If
    End If
  End Sub

  Protected Sub btnAddCandidato_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAddCandidato.Click
    grvCandidatosSelecao_PageIndexChanging(grvCandidatosSelecao, New GridViewPageEventArgs(0))
    setSelecao(SELECAO_CANDIDATO)
    mpeSelecao.Show()
  End Sub

  Protected Sub btnListarVagas_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnListarVagas.Click
    panCandidatos.Visible = False
    mostraPaineis(ESTADO_LISTA)
  End Sub

  Protected Sub btnBuscarCandidato_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnBuscarCandidato.Click
    grvCandidatosSelecao_PageIndexChanging(grvCandidatosSelecao, New GridViewPageEventArgs(0))
  End Sub

  Protected Sub grvCandidatos_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grvCandidatos.RowCommand
    If e.CommandName.ToUpper() = "VISUALIZARPROVA" Then
      Session("idCandidato") = e.CommandArgument
      Dim objBEProva As BEProva = BCProva.ResumoDaProva(Integer.Parse(e.CommandArgument), Session("idProva"))
      Dim objBEProvas As New List(Of BEProva)
      objBEProvas.Add(objBEProva)
      dtvProva.Fields(3).Visible = False
      dtvProva.DataSource = objBEProvas
      dtvProva.DataBind()

      grvRespostasProva.DataSource = objBEProva.Questoes
      grvRespostasProva.DataBind()

      panCandidatos.Visible = False
      pandtvProva.Visible = True
      panRespostasProva.Visible = True
    End If
  End Sub

  Protected Sub grvCandidatos_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvCandidatos.SelectedIndexChanged
    Dim objCandidatos As New List(Of BECandidato)
    panCandidatos.Visible = False
    panCurriculo.Visible = True
    objCandidatos.Add(BCCandidato.SelecionaCandidato(grvCandidatos.SelectedDataKey("Id")))
    dtvCurriculo.DataSource = objCandidatos
    dtvCurriculo.DataBind()

    dtvExperienciaAcademica.DataSource = objCandidatos(0).Curriculo.FormacoesEscolares
    dtvExperienciaAcademica.DataBind()

    dtvExperienciaProfissional.DataSource = objCandidatos(0).Curriculo.ExperienciasProfessionais
    dtvExperienciaProfissional.DataBind()

    grvIdiomas.DataSource = objCandidatos(0).Curriculo.Idiomas
    grvIdiomas.DataBind()

  End Sub

  Protected Sub btnVoltar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVoltar.Click
    panCandidatos.Visible = True
    panCurriculo.Visible = False
    grvCandidatos.SelectedIndex = -1
  End Sub

  Protected Sub grvCandidatosSelecao_DataBound(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvCandidatosSelecao.DataBound
    checkRowsCandidato()
  End Sub

  Protected Sub grvCandidatos_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles grvCandidatos.RowDeleting
    Dim iList As List(Of BECandidato) = Session("Candidatos")
    BCVaga.RemoverCandidato(Session("IdVaga"), iList.Item(e.RowIndex).Id)
    iList.RemoveAt(e.RowIndex)
    grvCandidatos.DataSource = iList
    grvCandidatos.DataBind()
  End Sub

  Protected Sub grvCandidatosSelecao_PageIndexChanging(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewPageEventArgs) Handles grvCandidatosSelecao.PageIndexChanging
    grvCandidatosSelecao.PageIndex = e.NewPageIndex
    With grvCandidatosSelecao
      .SelectedIndex = -1
      .DataSource = BCCandidato.Selecionar(ddl_Sexo.SelectedValue, ddl_PossuiFilhos.SelectedValue, ddl_PortadorDeficiencia.SelectedValue, _
                                           ddl_Idade.SelectedValue, ddl_Nacionalidade.SelectedValue, ddl_Cidade.SelectedValue, _
                                           ddl_Estado.SelectedValue, ddl_GrauEscolaridade.SelectedValue, txt_Atribuicoes.Text, _
                                           ddl_Alemao.SelectedIndex, ddl_Espanhol.SelectedIndex, ddl_Frances.SelectedIndex, _
                                           ddl_Ingles.SelectedIndex, ddl_Italiano.SelectedIndex, _
                                           Session(Session("strTela") & "_SortExpression")(SORT_CANDIDATOS), _
                                           Session(Session("strTela") & "_SortDirection")(SORT_CANDIDATOS))
      .DataBind()
    End With

  End Sub

  Protected Sub grvCandidatosSelecao_Sorting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs) Handles grvCandidatosSelecao.Sorting
    setSorting(SORT_CANDIDATOS, e)
    e.Cancel = True
    grvCandidatosSelecao_PageIndexChanging(grvCandidatosSelecao, New GridViewPageEventArgs(0))
    'setSelecao(SELECAO_CANDIDATO)
  End Sub

  Protected Sub checkRowsCandidato()
    Dim nI As Integer = 0, nJ As Integer = 0
    Dim objGridSelected As GridView = grvCandidatos
    Dim objGridSelecao As GridView = grvCandidatosSelecao
    Dim chkName As String = "chkSelectCandidato"
    For nI = 0 To objGridSelecao.Rows.Count - 1
      Dim objCBSelecao As CheckBox = objGridSelecao.Rows(nI).FindControl(chkName)
      objCBSelecao.Checked = False
      For Each objDKSelected As DataKey In objGridSelected.DataKeys
        If objGridSelecao.DataKeys(nI)("Id") = objDKSelected("Id") Then
          objCBSelecao.Checked = True
          Exit For
        End If
      Next
    Next
    upSelecao.Update()
  End Sub

  Protected Sub chkSelectCandidato_CheckedChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim iList As New List(Of BECandidato)
    Dim nRowIndex As Integer = -1
    Dim Chk As CheckBox = sender
    Dim oRow As GridViewRow = Chk.Parent.Parent
    Dim strRegistro As String = grvCandidatosSelecao.DataKeys(oRow.RowIndex).Value

    If Session("Candidatos") IsNot Nothing Then
      iList = Session("Candidatos")
      For nI As Integer = 0 To iList.Count - 1
        If iList(nI).Id = strRegistro Then
          If Not Chk.Checked Then
            BCVaga.RemoverCandidato(Session("IdVaga"), strRegistro)
            iList.RemoveAt(nI)
          End If
          nRowIndex = nI
          Exit For
        End If
      Next
    End If
    If Chk.Checked AndAlso nRowIndex < 0 Then
      Dim objBECandidato As New BECandidato()
      objBECandidato.Id = strRegistro
      objBECandidato.Nome = Server.HtmlDecode(oRow.Cells(1).Text)
      objBECandidato.Estado = Server.HtmlDecode(oRow.Cells(2).Text)
      objBECandidato.Cidade = Server.HtmlDecode(oRow.Cells(3).Text)
      BCVaga.AdicionarCandidato(Session("IdVaga"), strRegistro)
      iList.Add(objBECandidato)
    End If
    Session("Candidatos") = iList
    grvCandidatos.DataSource = Session("Candidatos")
    grvCandidatos.DataBind()
  End Sub

  Protected Sub grvRespostasProva_RowDataBound(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewRowEventArgs) Handles grvRespostasProva.RowDataBound
    If (e.Row.RowType = DataControlRowType.DataRow) Then
      Dim objBEQuestao As BEQuestao = e.Row.DataItem
      If Not objBEQuestao Is Nothing Then
        With DirectCast(e.Row.FindControl("grvAlternativas"), GridView)
          .DataSource = objBEQuestao.Alternativas
          .DataBind()
        End With
        DirectCast(e.Row.FindControl("rbl_TipoResposta"), RadioButtonList).SelectedValue = objBEQuestao.RespostaDissertativaCerta
      End If
    End If
  End Sub

  Protected Sub btnVoltarCandidatos_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVoltarCandidatos.Click
    dtvProva.Fields(3).Visible = True
    If Session("AtualizarListaVagas") IsNot Nothing AndAlso Session("AtualizarListaVagas") Then
      grvRegistros_RowCommand(grvRegistros, New GridViewCommandEventArgs(Nothing, New CommandEventArgs("CANDIDATOS", Session("IdVaga"))))
      Session("AtualizarListaVagas") = Nothing
    End If
    panCandidatos.Visible = True
    pandtvProva.Visible = False
    panRespostasProva.Visible = False
  End Sub

  Protected Sub rbl_TipoResposta_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs)
    Dim objRBL As RadioButtonList = sender
    Dim objRow As GridViewRow = objRBL.NamingContainer
    BCQuestao.SetStatusRespostaDissertativa(Integer.Parse(Session("idCandidato")), Session("idProva"), _
                                            DirectCast(objRow.FindControl("hf_IdQuestao"), HiddenField).Value, _
                                            objRBL.SelectedValue)
    Session("AtualizarListaVagas") = True
  End Sub

  '=========****************                                     ****************=========

  Protected Sub setSorting(ByVal intTipo As Integer, ByVal e As System.Web.UI.WebControls.GridViewSortEventArgs)
    If (Session(Session("strTela") & "_SortExpression")(intTipo) Is Nothing OrElse _
        Session(Session("strTela") & "_SortDirection")(intTipo) Is Nothing OrElse _
        Session(Session("strTela") & "_SortExpression")(intTipo) <> e.SortExpression OrElse _
        Session(Session("strTela") & "_SortDirection")(intTipo) = "DESC") Then
      Session(Session("strTela") & "_SortDirection")(intTipo) = "ASC"
    ElseIf Session(Session("strTela") & "_SortDirection")(intTipo) = "ASC" Then
      Session(Session("strTela") & "_SortDirection")(intTipo) = "DESC"
    End If
    Session(Session("strTela") & "_SortExpression")(intTipo) = e.SortExpression
  End Sub

End Class
